﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using System.Data;
using Microsoft.ApplicationBlocks.Data;
using System.Transactions;

namespace DAL
{
    public class NegocioDAL
    {
        public static string strConexion = System.Configuration.ConfigurationManager.ConnectionStrings["ConexionBaseDesarrollo"].ConnectionString;

        public static long Nuevo(Negocio parNegocio)
        {
            using (TransactionScope tScope = new TransactionScope())
            {
                try
                {
                    //Antes de Guardar el Negocio, incertamos su direccion primero
                    long idDireccion = DireccionDAL.Nuevo(parNegocio.Direccion);
                    parNegocio.Direccion.IDDireccion = idDireccion;
                    //guardamos el negocio
                    long longRetorno = long.Parse(SqlHelper.ExecuteScalar(strConexion, "spNegocioNuevo",
                    parNegocio.NombreNegocio,
                    parNegocio.RazonSocial,
                    parNegocio.Descripcion,
                    parNegocio.CUIT,
                    parNegocio.Email,
                    parNegocio.Telefono,
                    parNegocio.FechaAlta,
                    parNegocio.Direccion.IDDireccion,
                    parNegocio.Provincia.IDProvincia,
                    parNegocio.Pais.IDPais,
                    parNegocio.NegocioEstado.IDNegocioEstado).ToString());
                    tScope.Complete();
                    return longRetorno;
                }
                catch (Exception ex)
                {
                    tScope.Dispose();
                    throw ex;
                }
            }
        }


        public static void Modificar (Negocio parNegocio)
        {
            DireccionDAL.Modificar(parNegocio.Direccion);
            SqlHelper.ExecuteNonQuery(strConexion, "spNegocioModificar",
            parNegocio.IDNegocio,
            parNegocio.NombreNegocio,
            parNegocio.RazonSocial,
            parNegocio.Descripcion,
            parNegocio.CUIT,
            parNegocio.Email,
            parNegocio.Telefono,
            parNegocio.FechaAlta,
            parNegocio.Direccion.IDDireccion,
            parNegocio.Provincia.IDProvincia,
            parNegocio.Pais.IDPais,
            parNegocio.NegocioEstado.IDNegocioEstado);
        }


        public static void ModificarLogo(long parIDNegocio, byte[] parBytes)
        {
            SqlHelper.ExecuteNonQuery(strConexion, "spNegocioModificarLogo",
            parIDNegocio,
            parBytes);
        }

        public static void Eliminar(long idNegocio)
        {
            SqlHelper.ExecuteNonQuery(strConexion, "spNegocioEliminar", idNegocio);
        }


        public static Negocio BuscarUnoPorUsuario (string parEmail)
        {
            try
            {
                DataTable dt = new DataTable();
                dt = SqlHelper.ExecuteDataset(strConexion, "spNegocioObtenerUnoPorUsuario", parEmail).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    Negocio oNegocio = new Negocio();
                    DataRow dr = dt.Rows[0];
                    oNegocio.IDNegocio = long.Parse(dr["idNegocio"].ToString());
                    oNegocio.NombreNegocio = dr["NombreNegocio"].ToString();
                    oNegocio.RazonSocial = dr["RazonSocial"].ToString();
                    oNegocio.Descripcion = dr["Descripcion"].ToString();
                    oNegocio.CUIT = dr["CUIT"].ToString();
                    oNegocio.Email = dr["Email"].ToString();
                    oNegocio.Telefono = dr["Telefono"].ToString();
                    oNegocio.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
                    if (dr["FechaBaja"].ToString() != string.Empty)
                        oNegocio.FechaBaja = DateTime.Parse(dr["FechaBaja"].ToString());
                    oNegocio.Direccion = Direccion.BuscarUno(long.Parse(dr["IDDireccion"].ToString()));
                    oNegocio.Provincia = Provincia.BuscarUno(int.Parse(dr["IDProvincia"].ToString()));
                    oNegocio.Pais = Pais.BuscarUno(int.Parse(dr["idPais"].ToString()));
                    oNegocio.NegocioEstado = NegocioEstado.BuscarUno(int.Parse(dr["idNegocioEstado"].ToString()));
                    if (dr["Logo"] != DBNull.Value)
                    {
                        oNegocio.Logo = (byte[])dr["Logo"];
                    }
                    return oNegocio;
                }
                //sino retorna Null
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                //TODO Falta Agragarle el LOG!!
                throw ex;
            }
        }



        public static Negocio BuscarUno(long parIdNegocio, bool? parTraerUsuariosNegocio)
        {
            try
            {
                DataTable dt = new DataTable();
                dt = SqlHelper.ExecuteDataset(strConexion, "spNegocioObtenerUno", parIdNegocio).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    Negocio oNegocio = new Negocio();
                    DataRow dr = dt.Rows[0];
                    oNegocio.IDNegocio = long.Parse(dr["idNegocio"].ToString());
                    oNegocio.NombreNegocio = dr["NombreNegocio"].ToString();
                    oNegocio.RazonSocial = dr["RazonSocial"].ToString();
                    oNegocio.Descripcion = dr["Descripcion"].ToString();
                    oNegocio.CUIT = dr["CUIT"].ToString();
                    oNegocio.Email = dr["Email"].ToString();
                    oNegocio.Telefono = dr["Telefono"].ToString();
                    oNegocio.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
                    if (dr["FechaBaja"].ToString() != string.Empty)
                        oNegocio.FechaBaja = DateTime.Parse(dr["FechaBaja"].ToString());
                    oNegocio.Direccion = Direccion.BuscarUno(long.Parse(dr["IDDireccion"].ToString()));
                    oNegocio.Provincia = Provincia.BuscarUno(int.Parse(dr["IDProvincia"].ToString()));
                    oNegocio.Pais = Pais.BuscarUno(int.Parse(dr["idPais"].ToString()));
                    oNegocio.NegocioEstado = NegocioEstado.BuscarUno(int.Parse(dr["idNegocioEstado"].ToString()));
                    if (dr["Logo"] != DBNull.Value)
                    {
                        oNegocio.Logo = (byte[]) dr["Logo"];
                    }
                    //si el parámetro parTraerUsuariosNegocio viene en true, cargo los empleados del negocio
                    //pasandole como parámetro el id  del Negocio.
                    if (parTraerUsuariosNegocio != null && parTraerUsuariosNegocio == true)
                    {
                        //TODO
                        //oNegocio.UsuariosNegocio = UsuarioDAL.BuscarVarios(null, null, null, null, parIdNegocio);
                    }
                    return oNegocio;
                }
                //sino retorna Null
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                //TODO Falta Agragarle el LOG!!
                throw ex;
            }
        }



        public static List<Negocio> BuscarTodos ()
        {
            try
            {
                DataTable dt = new DataTable();
                Negocio oNegocio ;
                List<Negocio> ListaNegocios = new List<Negocio>();
                dt = SqlHelper.ExecuteDataset(strConexion, CommandType.StoredProcedure, "spNegocioBuscarTodos").Tables[0];
                //Falta la parte que busca el negocio del sp
                //Si encontro retorna el objeto Negocio
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        oNegocio = new Negocio();
                        oNegocio.IDNegocio = long.Parse(dr["idNegocio"].ToString());
                        oNegocio.NombreNegocio = dr["NombreNegocio"].ToString();
                        oNegocio.RazonSocial = dr["RazonSocial"].ToString();
                        oNegocio.Descripcion = dr["Descripcion"].ToString();
                        oNegocio.CUIT = dr["CUIT"].ToString();
                        oNegocio.Email = dr["Email"].ToString();
                        oNegocio.Telefono = dr["Telefono"].ToString();
                        oNegocio.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
                        if (dr["FechaBaja"].ToString() != string.Empty)
                            oNegocio.FechaBaja = DateTime.Parse(dr["FechaBaja"].ToString());
                        oNegocio.Direccion = Direccion.BuscarUno(long.Parse(dr["IDDireccion"].ToString()));
                        oNegocio.Provincia = Provincia.BuscarUno(int.Parse(dr["IDProvincia"].ToString()));
                        oNegocio.Pais = Pais.BuscarUno(int.Parse(dr["idPais"].ToString()));
                        oNegocio.NegocioEstado = NegocioEstado.BuscarUno(int.Parse(dr["idNegocioEstado"].ToString()));
                        if (dr["Logo"] != DBNull.Value)
                        {
                            oNegocio.Logo = (byte[])dr["Logo"];
                        }
                        ListaNegocios.Add(oNegocio);
                    }
                    return ListaNegocios;
                }
                //sino retorna Null
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                //TODO Falta Agragarle el LOG!!
                throw ex;
            }
        }
    }
}
